--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/ui/map.py fe3d86e92194efcee4f3a5e10274bcd2d1280bdc (fe3d86e9) Text, 48.10 KB
T8b949e# Copyright (c) 2026 Mark Qvist - See LICENSE.md and README.md
Tff7b72import T7ee787os
Tff7b72import T7ee787RNS
Tff7b72import T7ee787time
Tff7b72import T7ee787pathlib
Tff7b72from T7ee787typing Tff7b72import Te6edf3Union
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dpTb4b4b4,Te6edf3sp
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivyT7ee787.T7ee787utils Tff7b72import Te6edf3escape_markup
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787recycleview Tff7b72import Te6edf3MDRecycleView
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787list Tff7b72import Te6edf3OneLineIconListItem
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRectangleFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787filemanager Tff7b72import Te6edf3MDFileManager
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDIconButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787icon_definitions Tff7b72import Te6edf3md_icons
Tff7b72from T7ee787kivymdT7ee787.T7ee787toast Tff7b72import Te6edf3toast
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Te6edf3StringPropertyTb4b4b4, Te6edf3BooleanPropertyTb4b4b4, Te6edf3ObjectPropertyTb4b4b4, Te6edf3ListProperty
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787sidebandT7ee787.T7ee787sense Tff7b72import Te6edf3Telemeter
Tff7b72from T7ee787mapview Tff7b72import Te6edf3CustomMapMarker
Tff7b72from T7ee787mapviewT7ee787.T7ee787view Tff7b72import Te6edf3MapMarker
Tff7b72from T7ee787mapviewT7ee787.T7ee787mbtsource Tff7b72import Te6edf3MBTilesMapSource
Tff7b72from T7ee787mapviewT7ee787.T7ee787source Tff7b72import Te6edf3MapSource
Tff7b72from T7ee787mapviewT7ee787.T7ee787clustered_marker_layer Tff7b72import Te6edf3ClusteredMarkerLayerTb4b4b4, Te6edf3ClusterMapMarkerTb4b4b4, Te6edf3TelemetryClusterMarker
Tff7b72import T7ee787threading
Tff7b72from T7ee787datetime Tff7b72import Te6edf3datetime
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format
Tff7b72from T7ee787androidT7ee787.T7ee787permissions Tff7b72import Te6edf3request_permissionsTb4b4b4, Te6edf3check_permission
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787helpers Tff7b72import Te6edf3ts_format
Tff7b72class T56d364MapTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3IF_UPDATE_INTERVAL Tff7b72= T79c0ff60
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3appTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffapp Tff7b72= Te6edf3app
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffmap_markers Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffmap_layer Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffmap_cache Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffmap_cache
Tff7b72selfTff7b72.Td2a8ffoffline_source Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffclustered_layer Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffclustered_markers Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffinterface_discovery_hashes Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffconnection_map_hashes Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8fflast_interfaces_update Tff7b72= T79c0ff0
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffmap_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3msource Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_sourceTb4b4b4(Tb4b4b4)
Te6edf3mzoom Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_zoomTa5d6ff"Tb4b4b4]
Te6edf3mlat Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_latTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3mlon Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_lonTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3mzoom Tff7b72> Te6edf3msourceTff7b72.Td2a8ffmax_zoomTb4b4b4: Te6edf3mzoom Tff7b72= Te6edf3msourceTff7b72.Td2a8ffmax_zoom
Tff7b72if Te6edf3mzoom Tff7b72< Te6edf3msourceTff7b72.Td2a8ffmin_zoomTb4b4b4: Te6edf3mzoom Tff7b72= Te6edf3msourceTff7b72.Td2a8ffmin_zoom
Tff7b72if Te6edf3mlat Tff7b72< Tff7b72-T79c0ff89Tb4b4b4: Te6edf3mlat Tff7b72= Tff7b72-T79c0ff89
Tff7b72if Te6edf3mlat Tff7b72> T79c0ff89Tb4b4b4: Te6edf3mlat Tff7b72= T79c0ff89
Tff7b72if Te6edf3mlon Tff7b72< Tff7b72-T79c0ff179Tb4b4b4: Te6edf3mlon Tff7b72= Tff7b72-T79c0ff179
Tff7b72if Te6edf3mlon Tff7b72> T79c0ff179Tb4b4b4: Te6edf3mlon Tff7b72= T79c0ff179
Tff7b72selfTff7b72.Td2a8ffscreen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_map_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffscreenTb4b4b4)
Tff7b72from T7ee787mapview Tff7b72import Te6edf3MapView
Te6edf3mapview Tff7b72= Te6edf3MapViewTb4b4b4(Te6edf3map_sourceTff7b72=Te6edf3msourceTb4b4b4, Te6edf3zoomTff7b72=Te6edf3mzoomTb4b4b4, Te6edf3latTff7b72=Te6edf3mlatTb4b4b4, Te6edf3lonTff7b72=Te6edf3mlonTb4b4b4)
Te6edf3mapviewTff7b72.Td2a8ffsnap_to_zoom Tff7b72= Tff7b72False
Te6edf3mapviewTff7b72.Td2a8ffdouble_tap_zoom Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmap Tff7b72= Te6edf3mapview
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_layoutTff7b72.Td2a8ffmap Tff7b72= Te6edf3mapview
Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_layoutTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffscreenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_layoutTff7b72.Td2a8ffmapTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclustered_layer Tff7b72= Te6edf3ClusteredMarkerLayerTb4b4b4(Te6edf3cluster_radiusTff7b72=T79c0ff100Tb4b4b4, Te6edf3cluster_clsTff7b72=Te6edf3ClusterMapMarkerTb4b4b4,
Te6edf3cluster_min_zoomTff7b72=T79c0ff0Tb4b4b4, Te6edf3cluster_max_zoomTff7b72=T79c0ff18Tb4b4b4, Te6edf3delegateTff7b72=Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffadd_layerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffclustered_layerTb4b4b4)
Tff7b72def Td2a8ffshowTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3locationTb4b4b4, Te6edf3zoomTff7b72=T79c0ff16Tb4b4b4)Tb4b4b4:
Te6edf3mz Tff7b72= Te6edf3zoom
Te6edf3lat Tff7b72= Te6edf3locationTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]
Te6edf3lon Tff7b72= Te6edf3locationTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3mz Tff7b72> Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmax_zoomTb4b4b4: Te6edf3mz Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmax_zoom
Tff7b72if Te6edf3mz Tff7b72< Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmin_zoomTb4b4b4: Te6edf3mz Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmin_zoom
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoom Tff7b72= Te6edf3mz
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Te6edf3latTb4b4b4,Te6edf3lonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffshow_bboxTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3lat_minTb4b4b4, Te6edf3lat_maxTb4b4b4, Te6edf3lon_minTb4b4b4, Te6edf3lon_maxTb4b4b4, Te6edf3paddingTff7b72=T79c0ff0.85Tb4b4b4, Te6edf3float_zoomTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoom_to_bboxTb4b4b4(Te6edf3lat_minTb4b4b4, Te6edf3lat_maxTb4b4b4, Te6edf3lon_minTb4b4b4, Te6edf3lon_maxTb4b4b4, Te6edf3paddingTff7b72=Te6edf3paddingTb4b4b4, Te6edf3float_zoomTff7b72=Te6edf3float_zoomTb4b4b4)
Tff7b72def Td2a8fffm_got_pathTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3pathTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fffm_exitedTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3source Tff7b72= Te6edf3MBTilesMapSourceTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3path
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tffa657strTb4b4b4(Te6edf3pathlibTff7b72.Td2a8ffPathTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72.Td2a8ffparentTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffUsing Tffea00\"Ta5d6ff"Tff7b72+Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff as offline mapTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ok_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3ate_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffMap SetTa5d6ff"Tb4b4b4, Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffUsing Tffea00\"Ta5d6ff"Tff7b72+Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff as offline mapTa5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3ok_button Tb4b4b4]Tb4b4b4)
Te6edf3ok_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3ate_dialogTff7b72.Td2a8ffdismissTb4b4b4)
Te6edf3ate_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError while loading map Tffea00\"Tffd700{Te6edf3pathTffd700}Tffea00\"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffCould not load map Tffea00\"Ta5d6ff"Tff7b72+Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3pathTb4b4b4)Tff7b72+Ta5d6ff"Tffea00\"Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ok_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3map_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffMap ErrorTa5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3ok_button Tb4b4b4]Tb4b4b4,
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffThe specified map file could not be loaded. Make sure the selected file is an MBTiles map in raster format. Vector maps are currently not supported.Ta5d6ff"Tb4b4b4)
Te6edf3ok_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3map_dialogTff7b72.Td2a8ffdismissTb4b4b4)
Te6edf3map_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffsettings_load_statesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fffm_exitedTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmanager_open Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fffile_managerTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffselect_file_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3perm_ok Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3perm_ok Tff7b72= Tff7b72selfTff7b72.Td2a8ffcheck_storage_permissionTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3path Tff7b72= Te6edf3secondary_external_storage_pathTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3path Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3path Tff7b72= Te6edf3primary_external_storage_pathTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3path Tff7b72= Te6edf3primary_external_storage_pathTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3perm_ok Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3path Tff7b72= Ta5d6ff"Ta5d6ff/Ta5d6ff"
Tff7b72elseTb4b4b4: Te6edf3path Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffexpanduserTb4b4b4(Ta5d6ff"Ta5d6ff~Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3perm_ok Tff7b72= Tff7b72True
Te6edf3path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3perm_ok Tff7b72and Te6edf3path Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8fffile_manager Tff7b72= Te6edf3MDFileManagerTb4b4b4(Te6edf3exit_managerTff7b72=Tff7b72selfTff7b72.Td2a8fffm_exitedTb4b4b4, Te6edf3select_pathTff7b72=Tff7b72selfTff7b72.Td2a8fffm_got_pathTb4b4b4)
Tff7b72selfTff7b72.Td2a8fffile_managerTff7b72.Td2a8ffext Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ff.mbtilesTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8fffile_managerTff7b72.Td2a8ffshowTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffError reading directory, check permissions!Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ok_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3ate_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffErrorTa5d6ff"Tb4b4b4, Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffCould not read directory, check permissions!Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3ok_button Tb4b4b4]Tb4b4b4)
Te6edf3ok_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3ate_dialogTff7b72.Td2a8ffdismissTb4b4b4)
Te6edf3ate_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_androidTb4b4b4(Tb4b4b4)Tb4b4b4: Te6edf3toastTb4b4b4(Ta5d6ff"Ta5d6ffNo file access, check permissions!Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3ok_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3ate_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffErrorTa5d6ff"Tb4b4b4,
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo file access, check permissions!Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3ok_button Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Te6edf3ok_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3ate_dialogTff7b72.Td2a8ffdismissTb4b4b4)
Te6edf3ate_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffget_offline_sourceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffoffline_source Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72selfTff7b72.Td2a8ffoffline_source
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3current_map_path Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3current_map_path Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffMap path cannot be NoneTa5d6ff"Tb4b4b4)
Te6edf3source Tff7b72= Te6edf3MBTilesMapSourceTb4b4b4(Te6edf3current_map_pathTb4b4b4, Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffoffline_source Tff7b72= Te6edf3source
Tff7b72return Tff7b72selfTff7b72.Td2a8ffoffline_source
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffError while loading map from Tffea00\"Tffd700{Te6edf3current_map_pathTffd700}Tffea00\"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsettings_load_statesTb4b4b4(Tb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffget_sourceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3source Tff7b72= Tff7b72None
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_offline_sourceTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3source Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3source Tff7b72= Te6edf3MapSourceTff7b72.Td2a8fffrom_providerTb4b4b4(Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4, Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4, Te6edf3quad_keyTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72return Te6edf3source
Tff7b72def Td2a8ffupdate_sourceTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sourceTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3ns Tff7b72= Te6edf3source Tff7b72or Tff7b72selfTff7b72.Td2a8ffget_sourceTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3source Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3maxz Tff7b72= Te6edf3sourceTff7b72.Td2a8ffmax_zoom
Te6edf3minz Tff7b72= Te6edf3sourceTff7b72.Td2a8ffmin_zoom
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoom Tff7b72> Te6edf3maxzTb4b4b4:
Te6edf3mz Tff7b72= Te6edf3maxzTb4b4b4; Te6edf3pxTb4b4b4, Te6edf3py Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_zoom_centerTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffset_zoom_atTb4b4b4(Te6edf3mzTb4b4b4, Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoom Tff7b72< Te6edf3minzTb4b4b4:
Te6edf3mz Tff7b72= Te6edf3minzTb4b4b4; Te6edf3pxTb4b4b4, Te6edf3py Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_zoom_centerTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffset_zoom_atTb4b4b4(Te6edf3mzTb4b4b4, Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4)
Te6edf3m Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap
Te6edf3nlat Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflat
Te6edf3nlon Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflon
Tff7b72if Te6edf3nlat Tff7b72< Tff7b72-T79c0ff89Tb4b4b4: Te6edf3nlat Tff7b72= Tff7b72-T79c0ff89
Tff7b72if Te6edf3nlat Tff7b72> T79c0ff89Tb4b4b4: Te6edf3nlat Tff7b72= T79c0ff89
Tff7b72if Te6edf3nlon Tff7b72< Tff7b72-T79c0ff179Tb4b4b4: Te6edf3nlon Tff7b72= Tff7b72-T79c0ff179
Tff7b72if Te6edf3nlon Tff7b72> T79c0ff179Tb4b4b4: Te6edf3nlon Tff7b72= T79c0ff179
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Te6edf3nlatTb4b4b4,Te6edf3nlonTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_source Tff7b72= Te6edf3ns
Tff7b72def Td2a8ffinterfaces_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_interfacesTa5d6ff"Tb4b4b4] Tff7b72^Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_interfacesTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_clusterTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_markersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffconnection_maps_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4] Tff7b72^Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4]Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_clusterTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_markersTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflayers_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3ml Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_layer
Te6edf3layers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4]Tb4b4b4: Te6edf3layersTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffofflineTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3layersTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4)
Te6edf3layersTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffveTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3ml Tff7b72== Tff7b72NoneTb4b4b4: Te6edf3ml Tff7b72= Te6edf3layersTb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3ml Tff7b72in Te6edf3layersTb4b4b4: Te6edf3ml Tff7b72= Te6edf3layersTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3mli Tff7b72= Te6edf3layersTff7b72.Td2a8ffindexTb4b4b4(Te6edf3mlTb4b4b4)
Te6edf3mli Tff7b72= Tb4b4b4(Te6edf3mliTff7b72+T79c0ff1Tb4b4b4)Tff7b72%Tffa657lenTb4b4b4(Te6edf3layersTb4b4b4)
Te6edf3ml Tff7b72= Te6edf3layersTb4b4b4[Te6edf3mliTb4b4b4]
Te6edf3source Tff7b72= Tff7b72None
Tff7b72if Te6edf3ml Tff7b72== Ta5d6ff"Ta5d6ffofflineTa5d6ff"Tb4b4b4: Te6edf3source Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_offline_sourceTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3ml Tff7b72== Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4: Te6edf3source Tff7b72= Te6edf3MapSourceTff7b72.Td2a8fffrom_providerTb4b4b4(Ta5d6ff"Ta5d6ffosmTa5d6ff"Tb4b4b4, Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4, Te6edf3quad_keyTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3ml Tff7b72== Ta5d6ff"Ta5d6ffveTa5d6ff"Tb4b4b4: Te6edf3source Tff7b72= Te6edf3MapSourceTff7b72.Td2a8fffrom_providerTb4b4b4(Ta5d6ff"Ta5d6ffveTa5d6ff"Tb4b4b4, Te6edf3cache_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffmap_cacheTb4b4b4, Te6edf3quad_keyTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72if Te6edf3source Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_layer Tff7b72= Te6edf3ml
Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Te6edf3sourceTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while switching map layer: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3map_nav_divisor Tff7b72= T79c0ff12
Te6edf3map_nav_zoom Tff7b72= T79c0ff0.25
Tff7b72def Td2a8ffnav_leftTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bb Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_bboxTb4b4b4(Tb4b4b4)
Te6edf3lat_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Te6edf3span Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_spanTb4b4b4, Te6edf3lon_spanTb4b4b4)
Te6edf3delta Tff7b72= Tb4b4b4(Tff7b72-Te6edf3spanTff7b72/Tff7b72selfTff7b72.Td2a8ffmap_nav_divisorTb4b4b4)Tff7b72*Te6edf3modifier
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflonTff7b72+Te6edf3deltaTb4b4b4)
Tff7b72def Td2a8ffnav_rightTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bb Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_bboxTb4b4b4(Tb4b4b4)
Te6edf3lat_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Te6edf3span Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_spanTb4b4b4, Te6edf3lon_spanTb4b4b4)
Te6edf3delta Tff7b72= Tb4b4b4(Te6edf3spanTff7b72/Tff7b72selfTff7b72.Td2a8ffmap_nav_divisorTb4b4b4)Tff7b72*Te6edf3modifier
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflatTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflonTff7b72+Te6edf3deltaTb4b4b4)
Tff7b72def Td2a8ffnav_upTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bb Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_bboxTb4b4b4(Tb4b4b4)
Te6edf3lat_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Te6edf3span Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_spanTb4b4b4, Te6edf3lon_spanTb4b4b4)
Te6edf3delta Tff7b72= Tb4b4b4(Te6edf3spanTff7b72/Tff7b72selfTff7b72.Td2a8ffmap_nav_divisorTb4b4b4)Tff7b72*Te6edf3modifier
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflatTff7b72+Te6edf3deltaTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflonTb4b4b4)
Tff7b72def Td2a8ffnav_downTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3bb Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_bboxTb4b4b4(Tb4b4b4)
Te6edf3lat_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff2Tb4b4b4]Tb4b4b4)
Te6edf3lon_span Tff7b72= Tffa657absTb4b4b4(Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72- Te6edf3bbTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4)
Te6edf3span Tff7b72= Tffa657minTb4b4b4(Te6edf3lat_spanTb4b4b4, Te6edf3lon_spanTb4b4b4)
Te6edf3delta Tff7b72= Tb4b4b4(Tff7b72-Te6edf3spanTff7b72/Tff7b72selfTff7b72.Td2a8ffmap_nav_divisorTb4b4b4)Tff7b72*Te6edf3modifier
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffcenter_onTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflatTff7b72+Te6edf3deltaTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fflonTb4b4b4)
Tff7b72def Td2a8ffget_zoom_centerTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3bb Tff7b72= Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_bboxTb4b4b4(Tb4b4b4)
Te6edf3slat Tff7b72= Tb4b4b4(Te6edf3bbTb4b4b4[T79c0ff2Tb4b4b4]Tff7b72-Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tff7b72/T79c0ff2Tb4b4b4; Te6edf3slon Tff7b72= Tb4b4b4(Te6edf3bbTb4b4b4[T79c0ff3Tb4b4b4]Tff7b72-Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4)Tff7b72/T79c0ff2
Te6edf3zlat Tff7b72= Te6edf3bbTb4b4b4[T79c0ff0Tb4b4b4]Tff7b72+Te6edf3slatTb4b4b4; Te6edf3zlon Tff7b72= Te6edf3bbTb4b4b4[T79c0ff1Tb4b4b4]Tff7b72+Te6edf3slon
Tff7b72return Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffget_window_xy_fromTb4b4b4(Te6edf3zlatTb4b4b4, Te6edf3zlonTb4b4b4, Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoomTb4b4b4)
Tff7b72def Td2a8ffnav_zoom_outTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3zd Tff7b72= Tff7b72-Tff7b72selfTff7b72.Td2a8ffmap_nav_zoomTff7b72*Te6edf3modifier
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoomTff7b72+Te6edf3zd Tff7b72> Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmin_zoomTb4b4b4:
Te6edf3pxTb4b4b4, Te6edf3py Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_zoom_centerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffanimated_diff_scale_atTb4b4b4(Te6edf3zdTb4b4b4, Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4)
Tff7b72def Td2a8ffnav_zoom_inTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3modifierTff7b72=T79c0ff1.0Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3zd Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_nav_zoomTff7b72*Te6edf3modifier
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffzoomTff7b72+Te6edf3zd Tff7b72< Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffmap_sourceTff7b72.Td2a8ffmax_zoom Tff7b72or Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffscale Tff7b72< T79c0ff3.0Tb4b4b4:
Te6edf3pxTb4b4b4, Te6edf3py Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_zoom_centerTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffanimated_diff_scale_atTb4b4b4(Te6edf3zdTb4b4b4, Te6edf3pxTb4b4b4, Te6edf3pyTb4b4b4)
Tff7b72def Td2a8ffsettings_load_statesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap_settings_screen Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_onlineTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_offlineTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_storage_externalTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_clusterTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_clusterTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_interfacesTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_interfacesTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_connection_mapsTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4]
Tff7b72def Td2a8ffsettings_initTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsettings_load_statesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffmap_settings_saveTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_externalTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_storage_externalTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_onlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_onlineTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_use_offlineTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_offlineTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_clusterTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_clusterTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_interfacesTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_interfacesTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_connection_mapsTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffexternal_toggleTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_pathTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72None
Te6edf3map_settings_saveTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffoffline_toggleTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_offlineTff7b72.Td2a8ffactiveTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_storage_fileTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4: Tff7b72selfTff7b72.Td2a8ffmap_select_file_actionTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_onlineTff7b72.Td2a8ffactive Tff7b72= Tff7b72True
Te6edf3map_settings_saveTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffonline_toggleTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_onlineTff7b72.Td2a8ffactiveTb4b4b4: Tff7b72pass
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_offlineTff7b72.Td2a8ffactive Tff7b72= Tff7b72True
Te6edf3map_settings_saveTb4b4b4(Tb4b4b4)Tb4b4b4; Tff7b72selfTff7b72.Td2a8ffupdate_sourceTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_offlineTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3offline_toggleTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_use_onlineTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3online_toggleTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_storage_externalTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3external_toggleTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_clusterTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3map_settings_saveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_interfacesTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3map_settings_saveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_connection_mapsTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3map_settings_saveTb4b4b4)
Tff7b72def Td2a8ffsettings_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffleftTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffhas_screenTb4b4b4(Ta5d6ff"Ta5d6ffmap_settings_screenTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_settings_screen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3layout_map_settings_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffapp Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffdelegate Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_config_infoTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Tffea00\nTffea00\nTa5d6ffSideband can use map sources from the Internet, or a map source stored locally on this device in MBTiles format.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_settings_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffsettings_initTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4: Tff7b72selfTff7b72.Td2a8ffsettings_load_statesTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Te6edf3direction
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffmap_settings_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffupdate_cache_sizeTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3size Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_map_cache_sizeTb4b4b4(Tb4b4b4)
Te6edf3size_str Tff7b72= Te6edf3RNSTff7b72.Td2a8ffprettysizeTb4b4b4(Te6edf3sizeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_cache_buttonTff7b72.Td2a8fftext Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffClear Tffd700{Te6edf3size_strTffd700}Ta5d6ff map cacheTa5d6ff"
Tff7b72if Te6edf3size Tff7b72> T79c0ff0.0Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_cache_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_cache_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_cache_buttonTff7b72.Td2a8fftext Tff7b72= Ta5d6fffTa5d6ff"Ta5d6ffNo data in map cacheTa5d6ff"
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3update_cache_sizeTb4b4b4, T79c0ff0.35Tb4b4b4)
Tff7b72def Td2a8ffclear_cacheTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYesTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4, Te6edf3theme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4, Te6edf3line_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4, Te6edf3text_colorTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffcolor_rejectTb4b4b4)
Te6edf3no_button Tff7b72= Te6edf3MDRectangleFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNoTa5d6ff"Tb4b4b4,Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff18Tb4b4b4)Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffClear map cache?Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_buttonTb4b4b4, Te6edf3no_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffclear_map_cacheTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcbTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffsettings_actionTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_settings_screenTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_cache_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3cbTb4b4b4, T79c0ff1.2Tb4b4b4)
Tff7b72def Td2a8ffdl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4: Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_noTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcreate_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3appearanceTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3l Tff7b72= Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Te6edf3a_icon Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3a_fg Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4; Te6edf3a_bg Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3marker Tff7b72= Te6edf3CustomMapMarkerTb4b4b4(Te6edf3latTff7b72=Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3lonTff7b72=Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3icon_bgTff7b72=Te6edf3a_bgTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffapp Tff7b72= Tff7b72self
Te6edf3markerTff7b72.Td2a8ffsource_dest Tff7b72= Te6edf3source
Te6edf3markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficon Tff7b72= Te6edf3MDMapIconButtonTb4b4b4(Te6edf3iconTff7b72=Te6edf3a_iconTb4b4b4, Te6edf3icon_colorTff7b72=Te6edf3a_fgTb4b4b4,
Te6edf3md_bg_colorTff7b72=Te6edf3a_bgTb4b4b4, Te6edf3theme_icon_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4,
Te6edf3icon_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4, Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffmap_display_telemetryTb4b4b4)
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8ff_default_icon_pad Tff7b72= Te6edf3dpTb4b4b4(T79c0ff16Tb4b4b4)
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8ffsource_dest Tff7b72= Te6edf3markerTff7b72.Td2a8ffsource_dest
Te6edf3markerTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3markerTff7b72.Td2a8fficonTb4b4b4)
T8b949e########
T8b949e# marker.badge = MDMapIconButton(
T8b949e# icon="network-strength-2", icon_color=[0,0,0,1],
T8b949e# md_bg_color=[1,1,1,1], theme_icon_color="Custom",
T8b949e# icon_size=dp(18),
T8b949e# )
T8b949e# marker.badge._default_icon_pad = dp(5)
T8b949e# marker.icon.add_widget(marker.badge)
T8b949e########
Tff7b72return Te6edf3marker
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not create map marker for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3sourceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffcreate_clustered_markerTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3sourceTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3appearanceTb4b4b4, Te6edf3inspectableTff7b72=Tff7b72TrueTb4b4b4, Te6edf3smallTff7b72=Tff7b72FalseTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3l Tff7b72= Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4; Te6edf3a_icon Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3a_fg Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4; Te6edf3a_bg Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3clustered_marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffadd_markerTb4b4b4(Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Tff7b72clsTff7b72=Te6edf3TelemetryClusterMarkerTb4b4b4,
Te6edf3optionsTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffsource_destTa5d6ff"Tb4b4b4: Te6edf3sourceTb4b4b4, Ta5d6ff"Ta5d6ffappTa5d6ff"Tb4b4b4: Tff7b72selfTff7b72.Td2a8ffappTb4b4b4,
Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4: Te6edf3a_iconTb4b4b4, Ta5d6ff"Ta5d6fficon_colorTa5d6ff"Tb4b4b4: Te6edf3a_fgTb4b4b4, Ta5d6ff"Ta5d6ffmd_bg_colorTa5d6ff"Tb4b4b4: Te6edf3a_bgTb4b4b4, Ta5d6ff"Ta5d6ffsmallTa5d6ff"Tb4b4b4: Te6edf3smallTb4b4b4,
Ta5d6ff"Ta5d6fflocation_timeTa5d6ff"Tb4b4b4: Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffinspectableTa5d6ff"Tb4b4b4: Te6edf3inspectableTb4b4b4}Tb4b4b4)
Tff7b72return Te6edf3clustered_marker
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffCould not create clustered map marker for Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3sourceTb4b4b4)Tffd700}Ta5d6ff: Tffd700{Te6edf3eTffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72return Tff7b72None
Tff7b72def Td2a8ffupdate_clustered_markersTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3earliest Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff"Tb4b4b4]
Te6edf3telemetry_entries Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflist_telemetryTb4b4b4(Te6edf3afterTff7b72=Te6edf3earliestTb4b4b4)
Te6edf3own_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash
Te6edf3changes Tff7b72= Tff7b72False
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconnection_map_hashes Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_interfacesTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinterface_discovery_hashes Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8fflast_interfaces_update Tff7b72= T79c0ff0
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72> Tff7b72selfTff7b72.Td2a8fflast_interfaces_updateTff7b72+Tff7b72selfTff7b72.Td2a8ffIF_UPDATE_INTERVALTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_interfaces_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3ifs Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fflist_discovered_interfacesTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3iface Tff7b72in Te6edf3ifsTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6fftransportTa5d6ff" Tff7b72in Te6edf3iface Tff7b72and Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fftransportTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3telemetry_source Tff7b72= Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6ffdiscovery_hashTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffinterface_discovery_hashesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Te6edf3iface
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3iface Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3iface Tff7b72and Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72and Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3telemetry_source Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Te6edf3if_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffiface_appearanceTb4b4b4(Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3telemetry Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4: Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4: Te6edf3ifaceTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4: Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4}Tb4b4b4}
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_clustered_markerTb4b4b4(Te6edf3telemetry_sourceTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3if_appearanceTb4b4b4)
Tff7b72if Te6edf3marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Te6edf3marker
Te6edf3changes Tff7b72= Tff7b72True
T8b949e# Add own marker if available
Te6edf3retain_own Tff7b72= Tff7b72False
Te6edf3own_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_telemetryTb4b4b4(Tb4b4b4)
Te6edf3own_appearance Tff7b72= Tb4b4b4[ Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4] Tb4b4b4]
T8b949e# Skip ignored telemetry entries
Te6edf3skip_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3telemetry_source Tff7b72in Te6edf3telemetry_entriesTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)Tb4b4b4: Te6edf3skip_entriesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72pass
Tff7b72for Te6edf3skip_entry Tff7b72in Te6edf3skip_entriesTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3telemetry_entriesTff7b72.Td2a8ffpopTb4b4b4(Te6edf3skip_entryTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3own_telemetry Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3own_telemetry Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3retain_own Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3own_address Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Te6edf3clustered_marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_clustered_markerTb4b4b4(Te6edf3own_addressTb4b4b4, Te6edf3own_telemetryTb4b4b4, Te6edf3own_appearanceTb4b4b4)
Tff7b72if Te6edf3clustered_marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3own_addressTb4b4b4] Tff7b72= Te6edf3clustered_marker
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3own_addressTb4b4b4]
Te6edf3o Tff7b72= Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4] Tff7b72> Te6edf3markerTff7b72.Td2a8fflocation_time Tff7b72or Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffown_appearance_changedTb4b4b4:
Te6edf3clustered_marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3own_addressTb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3clustered_markerTff7b72.Td2a8fflon Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflat Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fficon Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fficon_color Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8ffmd_bg_color Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8ffupdate_propsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffown_appearance_changed Tff7b72= Tff7b72False
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating own map marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3stale_markers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Tff7b72if Tff7b72not Te6edf3marker Tff7b72in Te6edf3telemetry_entries Tff7b72and Tff7b72not Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffinterface_discovery_hashes Tff7b72and Tff7b72not Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffconnection_map_hashesTb4b4b4:
Tff7b72if Te6edf3marker Tff7b72== Te6edf3own_addressTb4b4b4:
Tff7b72if Tff7b72not Te6edf3retain_ownTb4b4b4: Te6edf3stale_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3stale_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72for Te6edf3marker Tff7b72in Te6edf3stale_markersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale clustered marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3markerTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4) Tff7b72if Te6edf3RNSTff7b72.Td2a8ffslTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4) Tff7b72else Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3to_remove Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3markerTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffremove_markerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3markerTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclustered_markersTff7b72.Td2a8ffpopTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while removing clustered map marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while removing stale clustered markers: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72for Te6edf3telemetry_source Tff7b72in Te6edf3telemetry_entriesTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3skip Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry_source Tff7b72== Te6edf3own_addressTb4b4b4: Te6edf3skip Tff7b72= Tff7b72True
Tff7b72elif Te6edf3telemetry_source Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]
Te6edf3newest_timestamp Tff7b72= Te6edf3telemetry_entriesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3newest_timestamp Tff7b72<Tff7b72= Te6edf3markerTff7b72.Td2a8fflocation_timeTb4b4b4: Te6edf3skip Tff7b72= Tff7b72True
Te6edf3latest_viewable Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3skipTb4b4b4:
Tff7b72for Te6edf3telemetry_entry Tff7b72in Tffa657sortedTb4b4b4(Te6edf3telemetry_entriesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3tTb4b4b4: Te6edf3tTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3telemetry_timestamp Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3telemetry_data Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3t Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3telemetry_dataTb4b4b4)
Tff7b72if Te6edf3t Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3telemetry Tff7b72= Te6edf3tTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3telemetry Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3latest_viewable Tff7b72= Te6edf3telemetry
Tff7b72break
Tff7b72if Te6edf3latest_viewable Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3latest_viewableTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3telemetry_source Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_appearanceTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_clustered_markerTb4b4b4(Te6edf3telemetry_sourceTb4b4b4, Te6edf3latest_viewableTb4b4b4, Te6edf3appearanceTb4b4b4)
Tff7b72if Te6edf3marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Te6edf3marker
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_appearanceTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Te6edf3clustered_marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3latest_viewableTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflat Tff7b72= Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fflon Tff7b72= Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fficon Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8fficon_color Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8ffmd_bg_color Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3clustered_markerTff7b72.Td2a8ffupdate_propsTb4b4b4(Tb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_connection_mapsTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3latest_connection_maps Tff7b72= Tff7b72None
Tff7b72for Te6edf3telemetry_entry Tff7b72in Tffa657sortedTb4b4b4(Te6edf3telemetry_entriesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3tTb4b4b4: Te6edf3tTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3telemetry_timestamp Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3telemetry_data Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3t Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3telemetry_dataTb4b4b4)
Tff7b72if Te6edf3t Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3telemetry Tff7b72= Te6edf3tTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffconnection_mapTa5d6ff" Tff7b72in Te6edf3telemetry Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6ffconnection_mapTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6ffmapsTa5d6ff" Tff7b72in Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6ffconnection_mapTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3latest_connection_maps Tff7b72= Te6edf3telemetry
Tff7b72break
Tff7b72if Te6edf3latest_connection_mapsTb4b4b4:
Te6edf3source_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_appearanceTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Te6edf3m Tff7b72= Te6edf3latest_connection_mapsTb4b4b4[Ta5d6ff"Ta5d6ffconnection_mapTa5d6ff"Tb4b4b4]
Tff7b72for Te6edf3mn Tff7b72in Te6edf3mTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3cm Tff7b72= Te6edf3mTb4b4b4[Ta5d6ff"Ta5d6ffmapsTa5d6ff"Tb4b4b4]Tb4b4b4[Te6edf3mnTb4b4b4]
Tff7b72if Tff7b72not Ta5d6ff"Ta5d6ffpointsTa5d6ff" Tff7b72in Te6edf3cmTb4b4b4: Tff7b72continue
Tff7b72for Te6edf3p_hash Tff7b72in Te6edf3cmTb4b4b4[Ta5d6ff"Ta5d6ffpointsTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3p Tff7b72= Te6edf3cmTb4b4b4[Ta5d6ff"Ta5d6ffpointsTa5d6ff"Tb4b4b4]Tb4b4b4[Te6edf3p_hashTb4b4b4]
Tff7b72if Ta5d6ff"Ta5d6fflatitudeTa5d6ff" Tff7b72in Te6edf3p Tff7b72and Ta5d6ff"Ta5d6fflongitudeTa5d6ff" Tff7b72in Te6edf3p Tff7b72and Ta5d6ff"Ta5d6ffaltitudeTa5d6ff" Tff7b72in Te6edf3pTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconnection_map_hashesTb4b4b4[Te6edf3p_hashTb4b4b4] Tff7b72= Te6edf3p
Tff7b72if Tff7b72not Te6edf3p_hash Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ffsignalTa5d6ff" Tff7b72in Te6edf3p Tff7b72and Ta5d6ff"Ta5d6ffqTa5d6ff" Tff7b72in Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4] Tff7b72and Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3signal_q Tff7b72= Tffa657intTb4b4b4(Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6ffsignalTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3signal_q Tff7b72= Ta5d6ff"Ta5d6ffinvalidTa5d6ff"
Te6edf3if_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffiface_appearanceTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffsignal-Tffd700{Te6edf3signal_qTffd700}Ta5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3if_appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffiface_appearanceTb4b4b4(Ta5d6ff"Ta5d6ffconnectionTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3source_appearanceTb4b4b4:
Te6edf3if_appearanceTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Te6edf3source_appearanceTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3if_appearanceTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Te6edf3source_appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3plat Tff7b72= Tffa657floatTb4b4b4(Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4; Te6edf3plon Tff7b72= Tffa657floatTb4b4b4(Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]Tb4b4b4)Tb4b4b4; Te6edf3palt Tff7b72= Tffa657floatTb4b4b4(Te6edf3pTb4b4b4[Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3telemetry Tff7b72= Tb4b4b4{Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4: Te6edf3platTb4b4b4, Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4: Te6edf3plonTb4b4b4, Ta5d6ff"Ta5d6ffaltitudeTa5d6ff"Tb4b4b4: Te6edf3paltTb4b4b4, Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4: Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4}Tb4b4b4}
T8b949e# marker = self.create_clustered_marker(p_hash, telemetry, if_appearance, inspectable=False)
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_clustered_markerTb4b4b4(Te6edf3telemetry_sourceTb4b4b4, Te6edf3telemetryTb4b4b4, Te6edf3if_appearanceTb4b4b4, Te6edf3smallTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3markerTff7b72.Td2a8ffparent Tff7b72= Te6edf3telemetry_source
Tff7b72if Te6edf3marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3p_hashTb4b4b4] Tff7b72= Te6edf3marker
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating clustered map entry for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fflast_map_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3changesTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffready Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffrepositionTb4b4b4(Te6edf3rebuildTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffupdate_markersTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3st Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_clusterTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4:
Te6edf3to_remove Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3markerTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffremove_markerTb4b4b4(Te6edf3to_removeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_markers Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffupdate_clustered_markersTb4b4b4(Tb4b4b4)
Te6edf3uc Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4)Tb4b4b4:
Te6edf3stale_markers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4: Te6edf3stale_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72for Te6edf3marker Tff7b72in Te6edf3stale_markersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving clustered marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3markerTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3to_remove Tff7b72= Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3markerTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffremove_markerTb4b4b4(Tff7b72selfTff7b72.Td2a8ffclustered_markersTb4b4b4[Te6edf3markerTb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclustered_markersTff7b72.Td2a8ffpopTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while removing clustered map marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffready Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffclustered_layerTff7b72.Td2a8ffrepositionTb4b4b4(Te6edf3rebuildTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_markers_legacyTb4b4b4(Te6edf3senderTff7b72=Te6edf3senderTb4b4b4)
Te6edf3uc Tff7b72= Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ffUpdated Tffd700{Te6edf3ucTffd700}Ta5d6ff map markers in Tffd700{Te6edf3RNSTff7b72.Td2a8ffprettyshorttimeTb4b4b4(Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tff7b72-Te6edf3stTb4b4b4)Tffd700}Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffupdate_markers_legacyTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3earliest Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffmap_history_limitTa5d6ff"Tb4b4b4]
Te6edf3telemetry_entries Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflist_telemetryTb4b4b4(Te6edf3afterTff7b72=Te6edf3earliestTb4b4b4)
Te6edf3own_address Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhash
Te6edf3changes Tff7b72= Tff7b72False
T8b949e# Add own marker if available
Te6edf3retain_own Tff7b72= Tff7b72False
Te6edf3own_telemetry Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_telemetryTb4b4b4(Tb4b4b4)
Te6edf3own_appearance Tff7b72= Tb4b4b4[ Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_iconTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_fgTa5d6ff"Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_bgTa5d6ff"Tb4b4b4] Tb4b4b4]
Te6edf3skip_entries Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fftelemetry_display_trusted_onlyTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3telemetry_source Tff7b72in Te6edf3telemetry_entriesTb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffis_trustedTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)Tb4b4b4:
Te6edf3skip_entriesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72pass
Tff7b72for Te6edf3skip_entry Tff7b72in Te6edf3skip_entriesTb4b4b4:
Tff7b72tryTb4b4b4: Te6edf3telemetry_entriesTff7b72.Td2a8ffpopTb4b4b4(Te6edf3skip_entryTb4b4b4)
Tff7b72exceptTb4b4b4: Tff7b72pass
Tff7b72tryTb4b4b4:
Tff7b72if Te6edf3own_telemetry Tff7b72!= Tff7b72None Tff7b72and Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3own_telemetry Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3retain_own Tff7b72= Tff7b72True
Tff7b72if Tff7b72not Te6edf3own_address Tff7b72in Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_markerTb4b4b4(Te6edf3own_addressTb4b4b4, Te6edf3own_telemetryTb4b4b4, Te6edf3own_appearanceTb4b4b4)
Tff7b72if Te6edf3marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3own_addressTb4b4b4] Tff7b72= Te6edf3marker
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffadd_markerTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3own_addressTb4b4b4]
Te6edf3o Tff7b72= Te6edf3own_telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4] Tff7b72> Te6edf3markerTff7b72.Td2a8fflocation_time Tff7b72or Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffown_appearance_changedTb4b4b4:
Te6edf3markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflast_updateTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fflat Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fflon Tff7b72= Te6edf3oTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8fficon Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8fficon_color Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8ffmd_bg_color Tff7b72= Te6edf3own_appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffown_appearance_changed Tff7b72= Tff7b72False
Te6edf3changes Tff7b72= Tff7b72True
Te6edf3stale_markers Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3marker Tff7b72in Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4:
Tff7b72if Tff7b72not Te6edf3marker Tff7b72in Te6edf3telemetry_entriesTb4b4b4:
Tff7b72if Te6edf3marker Tff7b72== Te6edf3own_addressTb4b4b4:
Tff7b72if Tff7b72not Te6edf3retain_ownTb4b4b4: Te6edf3stale_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72elseTb4b4b4: Te6edf3stale_markersTff7b72.Td2a8ffappendTb4b4b4(Te6edf3markerTb4b4b4)
Tff7b72for Te6edf3marker Tff7b72in Te6edf3stale_markersTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoving stale marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3markerTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4) Tff7b72if Te6edf3RNSTff7b72.Td2a8ffslTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4) Tff7b72else Tff7b72None
Tff7b72tryTb4b4b4:
Te6edf3to_remove Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3markerTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffremove_markerTb4b4b4(Te6edf3to_removeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmap_markersTff7b72.Td2a8ffpopTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while removing map marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4: Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating own map marker: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72for Te6edf3telemetry_source Tff7b72in Te6edf3telemetry_entriesTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3skip Tff7b72= Tff7b72False
Tff7b72if Te6edf3telemetry_source Tff7b72== Te6edf3own_addressTb4b4b4: Te6edf3skip Tff7b72= Tff7b72True
Tff7b72elif Te6edf3telemetry_source Tff7b72in Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]
Te6edf3newest_timestamp Tff7b72= Te6edf3telemetry_entriesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72if Te6edf3newest_timestamp Tff7b72<Tff7b72= Te6edf3markerTff7b72.Td2a8fflocation_timeTb4b4b4:
Te6edf3skip Tff7b72= Tff7b72True
Te6edf3latest_viewable Tff7b72= Tff7b72None
Tff7b72if Tff7b72not Te6edf3skipTb4b4b4:
Tff7b72for Te6edf3telemetry_entry Tff7b72in Tffa657sortedTb4b4b4(Te6edf3telemetry_entriesTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]Tb4b4b4, Te6edf3keyTff7b72=Tff7b72lambda Te6edf3tTb4b4b4: Te6edf3tTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4, Te6edf3reverseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3telemetry_timestamp Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3telemetry_data Tff7b72= Te6edf3telemetry_entryTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3t Tff7b72= Te6edf3TelemeterTff7b72.Td2a8fffrom_packedTb4b4b4(Te6edf3telemetry_dataTb4b4b4)
Tff7b72if Te6edf3t Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3telemetry Tff7b72= Te6edf3tTff7b72.Td2a8ffread_allTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6fflocationTa5d6ff" Tff7b72in Te6edf3telemetry Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72None Tff7b72and Te6edf3telemetryTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4] Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3latest_viewable Tff7b72= Te6edf3telemetry
Tff7b72break
Tff7b72elif Ta5d6ff"Ta5d6ffconnection_mapTa5d6ff" Tff7b72in Te6edf3telemetryTb4b4b4:
T8b949e# TODO: Telemetry entries with connection map sensor types are skipped for now,
T8b949e# until a proper rendering mechanism is implemented
Tff7b72break
Tff7b72if Te6edf3latest_viewable Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3l Tff7b72= Te6edf3latest_viewableTb4b4b4[Ta5d6ff"Ta5d6fflocationTa5d6ff"Tb4b4b4]
Tff7b72if Tff7b72not Te6edf3telemetry_source Tff7b72in Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4:
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_appearanceTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffcreate_markerTb4b4b4(Te6edf3telemetry_sourceTb4b4b4, Te6edf3latest_viewableTb4b4b4, Te6edf3appearanceTb4b4b4)
Tff7b72if Te6edf3marker Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4] Tff7b72= Te6edf3marker
Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8ffadd_markerTb4b4b4(Te6edf3markerTb4b4b4)
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Te6edf3marker Tff7b72= Tff7b72selfTff7b72.Td2a8ffmap_markersTb4b4b4[Te6edf3telemetry_sourceTb4b4b4]
Te6edf3markerTff7b72.Td2a8fflocation_time Tff7b72= Te6edf3latest_viewableTb4b4b4[Ta5d6ff"Ta5d6fftimeTa5d6ff"Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffutcTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fflat Tff7b72= Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflatitudeTa5d6ff"Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fflon Tff7b72= Te6edf3lTb4b4b4[Ta5d6ff"Ta5d6fflongitudeTa5d6ff"Tb4b4b4]
Te6edf3appearance Tff7b72= Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_appearanceTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8fficon Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8fficon_color Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff1Tb4b4b4]
Te6edf3markerTff7b72.Td2a8fficonTff7b72.Td2a8ffmd_bg_color Tff7b72= Te6edf3appearanceTb4b4b4[T79c0ff2Tb4b4b4]
Te6edf3changes Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while updating map entry for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3telemetry_sourceTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fftrace_exceptionTb4b4b4(Te6edf3eTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffappTff7b72.Td2a8fflast_map_update Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3changesTb4b4b4: Tff7b72selfTff7b72.Td2a8ffmapTff7b72.Td2a8fftrigger_updateTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72class T56d364MDMapIconButtonTb4b4b4(Te6edf3MDIconButtonTb4b4b4)Tb4b4b4:
Tff7b72pass
Te6edf3layout_map_settings_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffmap_settings_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffMap ConfigurationTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_sub_map_action(self)],
Ta5d6ff ]
Ta5d6ff ScrollView:
Ta5d6ff id: map_settings_scrollview
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [dp(28), dp(48), dp(28), dp(16)]
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffConfigure MapTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDLabel:
Ta5d6ff id: map_config_info
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Ta5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff MDLabel:
Ta5d6ff markup: True
Ta5d6ff text: Ta5d6ff"Tffea00\\Ta5d6ffnTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff text_size: self.width, None
Ta5d6ff height: self.texture_size[1]
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffCluster markersTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_cluster
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffDiscovered InterfacesTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_interfaces
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffConnection TelemetryTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_connection_maps
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffUse online map sourcesTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_use_online
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff text: Ta5d6ff"Ta5d6ffUse offline map sourceTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_use_offline
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffhorizontalTa5d6ff"
Ta5d6ff padding: [0,0,dp(24),0]
Ta5d6ff size_hint_y: None
Ta5d6ff height: dp(48)
Ta5d6ff
Ta5d6ff MDLabel:
Ta5d6ff id: map_storage_external_label
Ta5d6ff text: Ta5d6ff"Ta5d6ffUse external storage pathTa5d6ff"
Ta5d6ff font_style: Ta5d6ff"Ta5d6ffH6Ta5d6ff"
Ta5d6ff MDSwitch:
Ta5d6ff id: map_storage_external
Ta5d6ff pos_hint: Ta5d6ff{Ta5d6ff"Ta5d6ffcenter_yTa5d6ff"Ta5d6ff: 0.3}
Ta5d6ff active: False
Ta5d6ff MDBoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff size_hint_y: None
Ta5d6ff spacing: dp(24)
Ta5d6ff height: self.minimum_height
Ta5d6ff padding: [0, dp(24), 0, 0]
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: map_select_button
Ta5d6ff icon: Ta5d6ff"Ta5d6fflist-box-outlineTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffSelect MBTiles MapTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.select_file_action(self)
Ta5d6ff disabled: False
Ta5d6ff MDRectangleFlatIconButton:
Ta5d6ff id: map_cache_button
Ta5d6ff icon: Ta5d6ff"Ta5d6ffmap-clock-outlineTa5d6ff"
Ta5d6ff text: Ta5d6ff"Ta5d6ffClear map cacheTa5d6ff"
Ta5d6ff padding: [dp(0), dp(14), dp(0), dp(14)]
Ta5d6ff icon_size: dp(24)
Ta5d6ff font_size: dp(16)
Ta5d6ff size_hint: [1.0, None]
Ta5d6ff on_release: root.delegate.clear_cache(self)
Ta5d6ff disabled: False
Ta5d6ff"""
Te6edf3layout_map_screen Tff7b72= Ta5d6ff"""
Ta5d6ffMDScreen:
Ta5d6ff name: Ta5d6ff"Ta5d6ffmap_screenTa5d6ff"
Ta5d6ff
Ta5d6ff BoxLayout:
Ta5d6ff orientation: Ta5d6ff"Ta5d6ffverticalTa5d6ff"
Ta5d6ff MDTopAppBar:
Ta5d6ff title: Ta5d6ff"Ta5d6ffMapTa5d6ff"
Ta5d6ff anchor_title: Ta5d6ff"Ta5d6ffleftTa5d6ff"
Ta5d6ff elevation: 0
Ta5d6ff left_action_items:
Ta5d6ff [[Ta5d6ff'Ta5d6ffmenuTa5d6ff'Ta5d6ff, lambda x: root.app.nav_drawer.set_state(Ta5d6ff"Ta5d6ffopenTa5d6ff"Ta5d6ff)]]
Ta5d6ff right_action_items:
Ta5d6ff [
Ta5d6ff #[Ta5d6ff'Ta5d6ffformat-list-bulleted-typeTa5d6ff'Ta5d6ff, lambda x: root.app.map_object_list(self)], # Object List
Ta5d6ff [Ta5d6ff'Ta5d6ffarrow-down-bold-hexagon-outlineTa5d6ff'Ta5d6ff, lambda x: root.app.telemetry_request_action(self)], # Download telemetry
Ta5d6ff [Ta5d6ff'Ta5d6ffupload-lockTa5d6ff'Ta5d6ff, lambda x: root.app.telemetry_send_update(self)], # Send telemetry update
Ta5d6ff [Ta5d6ff'Ta5d6ffaccess-point-networkTa5d6ff'Ta5d6ff, lambda x: root.delegate.interfaces_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6fflayersTa5d6ff'Ta5d6ff, lambda x: root.delegate.layers_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6ffwrench-cogTa5d6ff'Ta5d6ff, lambda x: root.delegate.settings_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6ffcrosshairs-gpsTa5d6ff'Ta5d6ff, lambda x: root.app.map_own_location_action(self)],
Ta5d6ff [Ta5d6ff'Ta5d6ffcloseTa5d6ff'Ta5d6ff, lambda x: root.app.close_any_action(self)],
Ta5d6ff ]
Ta5d6ff MDBoxLayout:
Ta5d6ff id: map_layout
Ta5d6ff"""
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────